#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <cassert>
#include <cstdlib>
#include <utility>

using std::cin;
using std::cout;
using std::vector;

template<typename Iter, typename Comp>
Iter Partition(Iter begin, Iter end, typename std::iterator_traits<Iter>::value_type elem, Comp cmp) {
	if (begin == end) {
		return end;
	}
	--end;
	do {
		while (begin != end && cmp(*begin, elem)) {
			++begin;
		}
		while (begin != end && cmp(elem, *end)) {
			--end;
		}
		if (begin != end) {
			std::swap(*begin, *end);
			++begin;
		}
	} while (begin != end);
	return end;
}

template<typename Iter, typename Comp>
void Sort(Iter begin, Iter end, Comp cmp){
	size_t size = std::distance(begin, end);
	if (size <= 1) {
		return;
	}
	auto sep = *std::next(begin, rand() % size);
	Iter middle = Partition(begin, end, sep, cmp);
	Iter left_middle = middle;
	while (left_middle != begin && *left_middle == *middle) {
		--left_middle;
	}
	++left_middle;
	Sort(begin, left_middle, cmp);
	Sort(middle, end, cmp);
}

template<typename T>
void Input(std::istream &input, vector<T> &sequence) {
	size_t size;
	input >> size;
	sequence.resize(size);
	for (size_t index = 0; index < size; ++index) {
		input >> sequence[index];
	}
	srand(218);
}

template<typename T>
void Output(std::ostream &output, vector<T> &sequence) {
	for (size_t index = 0; index < sequence.size(); ++index) {
		output << sequence[index] << " ";
	}
}

int main() {
	vector<int> sequence;
	Input(cin, sequence);
	Sort(sequence.begin(), sequence.end(), std::less<int>());
	Output(cout, sequence);
}
